/**
 * 
 */
package com.jrh.biz.user;

import java.util.List;

import com.jrh.common.exception.UserAlreadyExistsException;
import com.jrh.domain.entity.User;
import com.jrh.domain.entity.UserProfile;
import com.jrh.domain.entity.UserScheme;

/**
 * 用户服务接口
 * 
 * @author mmy 2012-7-18 上午3:25:03
 */
public interface UserService {

    /**
     * 验证登录
     * 
     * @param loginId
     * @param password
     * @param site
     * @return
     */
    public User checkLogin(String loginId, String password, String site);

    /**
     * 通过用户ID获取用户信息
     * 
     * @param id
     * @param loginId
     * @return
     */
    public User loadUser(Long id, String loginId);

    /**
     * 通过用户登入ID和登入站点获取用户信息
     * 
     * @param loginId
     * @param site
     * @return
     */
    public User getUserByLoginIdAndSite(String loginId, String site);

    /**
     * 根据用户id取得用户附加信息
     * 
     * @param userId
     * @return
     */
    public UserProfile getUserProfileByUserId(Long userId);

    /**
     * 通过用户登入ID获取用户个人详细信息
     * 
     * @param loginId
     * @return
     */
    public UserProfile getUserProfileByLoginId(String loginId);

    /**
     * 找回密码
     * 
     * @param loginId
     * @param password 新密码
     * @param answer 问题答案
     * @return
     */
    public boolean forgetpassword(String loginId, String password, String answer);

    /**
     * 修改密码
     * 
     * @param user
     * @param newPassword
     * @return
     */
    public boolean updatePassword(User user, String newPassword);

    /**
     * 通过昵称获取用户
     * 
     * @param nickname 昵称
     * @return
     */
    public User getUserByNickname(String nickname);

    /**
     * 创建用户
     * 
     * @param user
     * @param userProfile
     * @return
     * @throws UserAlreadyExistsException
     */
    public boolean createUser(User user, UserProfile userProfile) throws UserAlreadyExistsException;

    /**
     * 查询用户信息
     * 
     * @param user
     * @return
     */
    public List<User> finduserid();
    /**
     * 修改用户信息
     * 
     * @param user
     * @return
     */
    public boolean updateUser(User user);

    /**
     * 记录并更新最后一次登录时间
     * 
     * @param userId
     * @return
     */
    public boolean updateLastLoginTime(Long userId);

    /**
     * 修改用户基本信息
     * 
     * @param userProfile
     * @return
     */
    public boolean updateUserProfile(UserProfile userProfile);

    /**
     * 通过用户ID删除用户
     * 
     * @param id
     * @param loginId
     * @return
     */
    public boolean deleteUser(Long id, String loginId);

}
